/**
 * 静态资源处理
 */

// 处理静态文件请求
export async function handleStaticAssets(request, env) {
  try {
    console.log(`[静态资源处理] 收到请求: ${request.method} ${request.url}`);
    
    const url = new URL(request.url);
    let path = url.pathname;
    
    console.log(`[静态资源处理] 原始路径: ${path}`);
    
    // 默认返回 index.html
    if (path === '/') {
      console.log('[静态资源处理] 检测到根路径，重定向到 index.html');
      path = '/index.html';
    }
    
    // 管理员路径处理
    if (path.startsWith('/admin/') && !path.includes('.')) {
      console.log(`[静态资源处理] 检测到管理员路径: ${path}`);
      // 管理员路径但没有文件扩展名时，返回管理员 index.html
      if (path === '/admin') {
        console.log('[静态资源处理] 管理员根路径，重定向到 admin/index.html');
        path = '/admin/index.html';
      }
    }
    
    // 优先通过 ASSETS 服务返回静态资源
    if (env.ASSETS) {
      const assetRes = await env.ASSETS.fetch(request);
      if (assetRes && assetRes.status !== 404) {
        console.log(`[静态资源处理] 通过 ASSETS 返回: ${path}`);
        return assetRes;
      } else {
        console.log(`[静态资源处理] ASSETS 未命中，尝试手动读取: ${path}`);
      }
    }

    // 首先尝试直接使用路径
    let fileContent = await getFileContent(path, env);
    let filePath = path;
    
    // 如果直接路径没找到，尝试添加 /public 前缀
    if (fileContent === null && !path.startsWith('/public/')) {
      console.log(`[静态资源处理] 尝试添加 /public 前缀: /public${path}`);
      filePath = `/public${path}`;
      fileContent = await getFileContent(filePath, env);
    }
    
    // 如果还是没找到，尝试不带 public 前缀的路径
    if (fileContent === null && path.startsWith('/public/')) {
      console.log(`[静态资源处理] 尝试移除 /public 前缀: ${path.substring(7)}`);
      filePath = path.substring(7);
      fileContent = await getFileContent(filePath, env);
    }
    
    if (fileContent === null) {
      console.log(`[静态资源处理] 文件未找到: ${path}`);
      return new Response('文件未找到', {
        status: 404,
        headers: {
          'Content-Type': 'text/plain; charset=utf-8'
        }
      });
    }
    
    // 设置适当的 Content-Type
    const contentType = getContentType(filePath);
    console.log(`[静态资源处理] 成功返回文件: ${filePath} (${contentType})`);
    
    return new Response(fileContent, {
      headers: {
        'Content-Type': contentType,
        'Cache-Control': 'public, max-age=3600' // 缓存控制
      }
    });
    
  } catch (error) {
    console.error('静态资源处理错误:', error);
    return new Response('静态资源加载失败', {
      status: 500,
      headers: {
        'Content-Type': 'text/plain; charset=utf-8'
      }
    });
  }
}

// 获取文件内容（增强实现）
async function getFileContent(filePath, env) {
  try {
    // 记录日志
    console.log(`[静态资源] 尝试加载: ${filePath}`);
    
    // 检查是否存在静态资源 KV 命名空间
    if (env.STATIC_ASSETS) {
      try {
        const content = await env.STATIC_ASSETS.get(filePath);
        if (content !== null) {
          console.log(`[静态资源] 从KV成功获取: ${filePath}`);
          return content;
        }
      } catch (kvError) {
        console.warn('KV 读取失败，尝试备用方法:', kvError);
      }
    }
    
    // 为根路径和index.html提供默认内容
    if (filePath === '/public/index.html' || filePath === '/index.html' || filePath === '/') {
      console.log(`[静态资源] 提供默认首页: ${filePath}`);
      // 返回完整的首页内容
      return `<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>校园报投稿系统</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            margin: 0;
            padding: 20px;
            background-color: #f5f5f5;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: white;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
        h1 {
            color: #333;
            text-align: center;
        }
        .form-group {
            margin-bottom: 20px;
        }
        label {
            display: block;
            margin-bottom: 5px;
            font-weight: bold;
        }
        input, select, textarea {
            width: 100%;
            padding: 10px;
            border: 1px solid #ddd;
            border-radius: 4px;
        }
        button {
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 12px 20px;
            border-radius: 4px;
            cursor: pointer;
            font-size: 16px;
        }
        button:hover {
            background-color: #45a049;
        }
        .preview-section {
            margin-top: 40px;
            padding: 20px;
            background-color: #f9f9f9;
            border-radius: 8px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>校园报投稿系统</h1>
        <p>欢迎使用校园报投稿系统！请填写以下信息并提交你的文章。</p>
        
        <form id="contributionForm">
            <div class="form-group">
                <label for="grade">年级 *</label>
                <select id="grade" name="grade" required>
                    <option value="">请选择年级</option>
                    <option value="1">一年级</option>
                    <option value="2">二年级</option>
                    <option value="3">三年级</option>
                    <option value="4">四年级</option>
                    <option value="5">五年级</option>
                    <option value="6">六年级</option>
                    <option value="7">七年级</option>
                    <option value="8">八年级</option>
                    <option value="9">九年级</option>
                </select>
            </div>

            <div class="form-group">
                <label for="class">班级 *</label>
                <select id="class" name="class" required>
                    <option value="">请选择班级</option>
                    <option value="1">1班</option>
                    <option value="2">2班</option>
                    <option value="3">3班</option>
                    <option value="4">4班</option>
                    <option value="5">5班</option>
                </select>
            </div>

            <div class="form-group">
                <label for="name">姓名 *</label>
                <input type="text" id="name" name="name" placeholder="请输入你的姓名" required>
            </div>

            <div class="form-group">
                <label for="title">文章标题 *</label>
                <input type="text" id="title" name="title" placeholder="请输入文章标题" required>
            </div>

            <div class="form-group">
                <label for="category">文章分类 *</label>
                <select id="category" name="category" required>
                    <option value="">请选择分类</option>
                    <option value="1">校园故事</option>
                    <option value="2">学习心得</option>
                    <option value="3">科技创新</option>
                    <option value="4">艺术文化</option>
                    <option value="5">体育活动</option>
                    <option value="6">其他</option>
                </select>
            </div>

            <div class="form-group">
                <label for="content">文章内容 *</label>
                <textarea id="content" name="content" rows="10" placeholder="请输入你的文章内容..." required></textarea>
            </div>

            <div class="form-actions">
                <button type="submit" class="btn btn-primary">提交投稿</button>
            </div>
        </form>

        <div class="preview-section">
            <h2>投稿预览</h2>
            <div id="previewContainer">
                <p>填写表单时将显示预览内容...</p>
            </div>
        </div>
    </div>
    
    <script>
        // 简单的表单提交处理
        document.getElementById('contributionForm').addEventListener('submit', function(e) {
            e.preventDefault();
            alert('投稿成功！系统正在处理您的文章。');
            this.reset();
        });
    </script>
</body>
</html>`;
    }
    
    // 为CSS文件提供默认样式
    if (filePath === '/public/css/style.css' || filePath === '/css/style.css') {
        console.log(`[静态资源] 提供默认样式: ${filePath}`);
        return `/* 默认样式 */
body { font-family: Arial, sans-serif; margin: 0; padding: 0; }
.container { max-width: 1200px; margin: 0 auto; padding: 20px; }`;
    }
    
    // 为JS文件提供默认脚本
    if (filePath === '/public/js/script.js' || filePath === '/js/script.js') {
        console.log(`[静态资源] 提供默认脚本: ${filePath}`);
        return `console.log('校园报投稿系统已加载');`;
    }
    
    console.log(`[静态资源] 文件未找到: ${filePath}`);
    return null;
    
    // 默认返回 null 表示文件不存在
    return null;
    
  } catch (error) {
    console.error('获取文件内容失败:', error);
    return null;
  }
}

// 获取文件的 Content-Type
function getContentType(filePath) {
  const extension = filePath.split('.').pop().toLowerCase();
  
  const contentTypeMap = {
    'html': 'text/html; charset=utf-8',
    'css': 'text/css; charset=utf-8',
    'js': 'application/javascript; charset=utf-8',
    'json': 'application/json; charset=utf-8',
    'txt': 'text/plain; charset=utf-8',
    'ico': 'image/x-icon',
    'png': 'image/png',
    'jpg': 'image/jpeg',
    'jpeg': 'image/jpeg',
    'gif': 'image/gif',
    'svg': 'image/svg+xml; charset=utf-8'
  };
  
  return contentTypeMap[extension] || 'application/octet-stream';
}